# @Version:1.0
# @Author：green-citrus

# 创建职员类（Clerk），属性有name,job,salary
# 1）不能随便查看职员Clerk的职位和工资等隐私，
#   比如职员("tiger"，"Python工程师"，20000)
# 2）提供公共方法，可以对职位和工资进行操作
# class Clerk:
#     # 公有属性
#     name = None
#     # 私有属性
#     __job = None
#     __salary = None
#
#     def __init__(self, name, job, sal):
#         self.name = name
#         self.__job = job
#         self.__salary = sal
#
#     def set_job(self, job):
#         self.__job = job
#
#     def get_job(self):
#         return self.__job
#
#     # 私有方法
#     def __hi(self):
#         print("hi()")
#
#     # 通过公共方法，操作私有方法
#     def f1(self):
#         self.__hi()
#
# clerk = Clerk("tiger", "Python工程师", 20000)
# print(clerk.get_job())
# clerk.set_job("Java工程师")
# # 通过公共方法，调用私有方法
# clerk.f1()

# 1、Python语言的动态特性，会出现 伪私有属性的情况
class Clerk:
    # 公有属性
    name = None
    # 私有属性
    __job = None
    __salary = None

    def __init__(self, name, job, sal):
        self.name = name
        self.__job = job
        self.__salary = sal

    def set_job(self, job):
        self.__job = job

    def get_job(self):
        return self.__job

clerk = Clerk("tiger", "Python工程师", 20000)

# 如果这样使用，因为Python语言的动态特性，会动态的创建属性 __job，但是这个属性
# 和我们在类中定义的私有属性__job并不是同一个变量，我们在类中定义的__job私有属性完整的名字是 _Clerk__job
clerk.__job = "Go工程师"
print(f"job={clerk.__job}") # job=Go工程师
print("ok")

# 获取真正的私有属性__job
print(f"{clerk.get_job()}") # Python工程师


